import { BaseModel } from '@/model/BaseModel';
import * as THREE from 'three';
export class Fly extends BaseModel {
    init() {
        this.scene.add(this.model)
        this.pointIndex = 0 // 下标用来换取坐标数组里面的某个对象？
        this.isCameraMove = false // 用于控制摄像机是否跟随切换位置的开关？
        this.isFly = false // 用于控制飞行器是否移动的开关？
        this.generateMovePath()
    }
    // 1. 生成一个飞行的路径，绕着x轴逆时针扫描
    generateMovePath () {
        // 椭圆曲线
        const AirFly_PATH = new THREE.EllipseCurve(
            0,  0,            // ax, aY 椭圆中心的x和y坐标
            110, 110,           // xRadius, yRadius 若相等，就是一个圆
            0,  - 2 * Math.PI,  // aStartAngle, aEndAngle 从正x轴算起曲线开始的角度和结束的角度
            false,            // aClockwise 椭圆是否按照顺时针
            0                 // aRotation 椭圆从x轴正方向逆时针旋转的角度
        )
        
        // 生成具体的路径点,Vector2二维的点
        let tempArr = AirFly_PATH.getPoints(3500)
        
        // 把坐标向y轴移动120个单位（模仿在天空的效果）
        let result = []
        for (let i = 0; i < tempArr.length; i++) {
            // 让这个几何图形绕着y轴转，y坐标不变，x和z坐标发生变化，形成曲线
            let item = new THREE.Vector3(tempArr[i].x, 120, tempArr[i].y)
            result.push(item)
        }
        this.pointsArr = result
    }

    onTick() {
        if (this.pointIndex < this.pointsArr.length - 1) {
            // 需要摄像机的视角跟着飞行器的视角一起移动
            if (this.isCameraMove) {
              // 更改摄像机位置
              this.camera.position.copy(this.pointsArr[this.pointIndex])
              // 让摄像机中心观察点往上偏移一点
              this.camera.lookAt(0, 20, 0)
            }
            this.model.position.copy(this.pointsArr[this.pointIndex]);
            this.pointIndex += 1; //调节速度
        } else {
            this.pointIndex = 0
        }
    }
}